package cn.tedu.api;
/**本类用于测试String类的使用*/
public class TestString {
    public static void main(String[] args) {
        //1.创建String的方式1
        /**1.字符串类型底层维护的是char[]*/
        char[] value = {'a','b','c'};
        String s1=new String(value);//触发String(char[])的含参构造来创建对象
        String s11=new String(value);//触发String(char[])的含参构造来创建对象

        //2.创建String的方式2
        String s2 = "abc";
        String s22 = "abc";
        String s3 = "ccc";

        //3.测试
        System.out.println(s1 == s2);//false,一个在堆里,一个在常量池
        System.out.println(s1 == s11);//false,两个不同的对象,地址值不同
        System.out.println(s2 == s22);//true,都在堆中常量池,并且由于内容相同,所有是同一个地址值
        System.out.println(s2 == s3);//false,都在堆中常量池,但是内容不同,所以指向两个地址值

        /**Object类中equals()的默认实现是通过==比较的
         * 但是,String类已经重写过了继承自Object中的equals()
         * 重写后,不再按照==比较地址值,而是比较两个字符串的的具体内容char
         * 也是就是,不论创建方式,只要串的内容一致,equals()就返回true*/
        System.out.println(s1.equals(s2));//ture,
        System.out.println(s1.equals(s11));//ture,
        System.out.println(s2.equals(s3));//false,
        System.out.println(s2.equals(s22));//ture,
    }
}
